home *** CD-ROM | disk | FTP | other *** search
/ PC World 2007 January / PCWorld_2007-01_cd.bin / v cisle / hotkey / AutoHotkey104504_Install.exe / AutoHotkey.chm / docs / scripts / numpad000.ahk < prev    next >
Text File  |  2006-11-15  |  2KB  |  62 lines

  1. ; Numpad 000 Key
  2. ; http://www.autohotkey.com
  3. ; This example script makes the special 000 key that appears on certain
  4. ; keypads into an equals key.  You can change the action by replacing the
  5. ; ôSend, =ö line with line(s) of your choice.
  6.  
  7. #MaxThreadsPerHotkey 5  ; Allow multiple threads for this hotkey.
  8. $Numpad0::
  9. #MaxThreadsPerHotkey 1
  10. ; Above: Use the $ to force the hook to be used, which prevents an
  11. ; infinite loop since this subroutine itself sends Numpad0, which
  12. ; would otherwise result in a recursive call to itself.
  13. SetBatchLines, 100 ; Make it run a little faster in this case.
  14. DelayBetweenKeys = 30 ; Adjust this value if it doesn't work.
  15. if A_PriorHotkey = %A_ThisHotkey%
  16. {
  17.     if A_TimeSincePriorHotkey < %DelayBetweenKeys%
  18.     {
  19.         if Numpad0Count =
  20.             Numpad0Count = 2 ; i.e. This one plus the prior one.
  21.         else if Numpad0Count = 0
  22.             Numpad0Count = 2
  23.         else
  24.         {
  25.             ; Since we're here, Numpad0Count must be 2 as set by
  26.             ; prior calls, which means this is the third time the
  27.             ; the key has been pressed. Thus, the hotkey sequence
  28.             ; should fire:
  29.             Numpad0Count = 0
  30.             Send, = ; ******* This is the action for the 000 key
  31.         }
  32.         ; In all the above cases, we return without further action:
  33.         CalledReentrantly = y
  34.         return
  35.     }
  36. }
  37. ; Otherwise, this Numpad0 event is either the first in the series
  38. ; or it happened too long after the first one (e.g. perhaps the
  39. ; user is holding down the Numpad0 key to auto-repeat it, which
  40. ; we want to allow).  Therefore, after a short delay -- during
  41. ; which another Numpad0 hotkey event may re-entrantly call this
  42. ; subroutine -- we'll send the key on through if no reentrant
  43. ; calls occurred:
  44. Numpad0Count = 0
  45. CalledReentrantly = n
  46. ; During this sleep, this subroutine may be reentrantly called
  47. ; (i.e. a simultaneous "thread" which runs in parallel to the
  48. ; call we're in now):
  49. Sleep, %DelayBetweenKeys%
  50. if CalledReentrantly = y ; Another "thread" changed the value.
  51. {
  52.     ; Since it was called reentrantly, this key event was the first in
  53.     ; the sequence so should be suppressed (hidden from the system):
  54.     CalledReentrantly = n
  55.     return
  56. }
  57. ; Otherwise it's not part of the sequence so we send it through normally.
  58. ; In other words, the *real* Numpad0 key has been pressed, so we want it
  59. ; to have its normal effect:
  60. Send, {Numpad0}
  61. return
  62.